package larc.dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import larc.dao.intr.ProcesoDao;
import larc.model.Proceso;
import larc.model.Puestos;
import larc.util.HibernateUtil;

public class ProcesoDaoImpl implements ProcesoDao{


	public void insertar(Proceso proceso) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			session.beginTransaction();
			session.save(proceso);
			session.getTransaction().commit();		
		}catch(Exception e)
		{
			System.out.println("Error al insertar : " + e.getMessage());
			session.beginTransaction().rollback();
		}finally{
			   if (session != null && session.isOpen()) 
			   {
				   session.close();
			   }
		}
		
	}


	public void eliminar(Proceso proceso) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			session.beginTransaction();
			session.delete(proceso);
			session.getTransaction().commit();
		}catch(Exception e)
		{
			System.out.println("Error al eliminar : " + e.getMessage());
			session.beginTransaction().rollback();
		}finally{
			   if (session != null && session.isOpen()) 
			   {
				   session.close();
			   }
		}
	}


	public void actualizar(Proceso proceso) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			session.beginTransaction();
			session.update(proceso);
			session.getTransaction().commit();
		}catch(Exception e)
		{
			System.out.println("Error al actualizar : " + e.getMessage());
			session.beginTransaction().rollback();
		}finally{
			   if (session != null && session.isOpen()) 
			   {
				   session.close();
			   }
		}
		
	}

	@SuppressWarnings("unchecked")
	public List<Proceso> listarTodo() {
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			return session.createQuery("from Proceso").list();
		}catch(Exception e)
		{
			System.out.println("Error al cargar : " + e.getMessage());
			
		}finally{
		   if (session != null && session.isOpen()) 
		   {
			   session.close();
		   }
		}
		return null;
	}


	@SuppressWarnings("unchecked")
	public List<Proceso> procesosxEmpresa(Integer idempresa) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			Query query = session.createQuery("select p from Proceso p where p.empCodigo = :id");
			query.setInteger("id",idempresa);
			return query.list();
		}catch(Exception e)
		{
			System.out.println("Error al cargar procesos por empresa con id "+ idempresa +" : " + e.getMessage());
		}finally{
			   if (session != null && session.isOpen()) 
			   {
				   session.close();
			   }
		}
		return null;
	}
	
	@SuppressWarnings("unchecked")
	public List<Puestos> puestosxEmpresa(Integer idproceso) {
		
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			Query query = session.createQuery("select p from Puestos p where p.procesoSelect.proCodigo = :id");
			query.setInteger("id",idproceso);
			return query.list();
		}catch(Exception e)
		{
			System.out.println("Error al cargar puestos por empresa con id "+ idproceso +" : " + e.getMessage());
		}finally{
			   if (session != null && session.isOpen()) 
			   {
				   session.close();
			   }
		}
		return null;
	}

}
